package cn.zmall.common.utils;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @Author BinBini
 * @Date 2020/12/14 16:43
 * @Version 1.0
 */
public class ThreadPoolUtil {

    // 线程缓冲队列
    private static BlockingQueue<Runnable> blockingQueue = new ArrayBlockingQueue<Runnable>(100);
    // 核心线程数，会一直存货，即使没有任务，线程池也会维护线程的最少数量
    private static final int SIZE_CORE_POOL = 5;
    // 线程池维护线程的最大数量
    private static final int SIZE_MAX_POOL = 10;
    // 线程池维护线程所允许的空闲空间
    private static final long ALICE_TIME = 2000;

    private static ThreadPoolExecutor pool = new ThreadPoolExecutor(SIZE_CORE_POOL, SIZE_MAX_POOL, ALICE_TIME, TimeUnit.MILLISECONDS, blockingQueue, new ThreadPoolExecutor.CallerRunsPolicy());

    static {
        pool.prestartAllCoreThreads();
    }

    public static ThreadPoolExecutor getPool() {
        return pool;
    }

    public static void main(String[] args) {
        System.out.println(pool.getPoolSize());
    }

}
